WebSockets এবং Server Sent Events (SSE)

Web Development - এএসপি ডট (ASP.Net) - SignalR ব্যবহার করে রিয়েল-টাইম অ্যাপ্লিকেশন |
2
2

WebSockets এবং Server-Sent Events (SSE) হল দুইটি গুরুত্বপূর্ণ প্রযুক্তি, যা রিয়েল-টাইম যোগাযোগ নিশ্চিত করতে ব্যবহৃত হয়। ASP.Net এ এই দুটি প্রযুক্তি ব্যবহারের মাধ্যমে, আপনি সার্ভার এবং ক্লায়েন্টের মধ্যে দ্বিমুখী যোগাযোগ বা একমুখী ডাটা ফিডিং সহজভাবে সেটআপ করতে পারেন।


১. WebSockets

WebSockets হল একটি যোগাযোগ প্রোটোকল যা client-server এর মধ্যে পুরোপুরি দ্বিমুখী, স্থায়ী এবং রিয়েল-টাইম যোগাযোগের সুবিধা প্রদান করে। এটি একটি ওপেন কনেকশন তৈরি করে, যা সার্ভার এবং ক্লায়েন্ট উভয়ের মধ্যে ডাটা আদান-প্রদান করতে সক্ষম। WebSocket গুলি মূলত HTTP রিকুয়েস্টের মাধ্যমে শুরু হয়, তবে পরবর্তীতে তারা একটি TCP/IP কনেকশনে স্যুইচ করে, যা কম ল্যাটেন্সি এবং স্থির ডাটা ট্রান্সফার প্রস্তাব করে।

WebSockets এর সুবিধা

  • দ্বিমুখী যোগাযোগ: WebSocket সার্ভার এবং ক্লায়েন্টের মধ্যে ডাটা আদান-প্রদান করতে পারে যেকোনো সময়।
  • কম লেটেন্সি: একবার কনেকশন তৈরি হলে, অতিরিক্ত HTTP হেডার বা কননেকশন ওভারহেড ছাড়া ডাটা সরাসরি পাঠানো সম্ভব।
  • স্কেলেবিলিটি: অ্যাপ্লিকেশনগুলোতে রিয়েল-টাইম পুশ নোটিফিকেশন এবং লাইভ আপডেটের জন্য ব্যবহৃত হয়, যেমন চ্যাট অ্যাপ্লিকেশন এবং গেমস।

WebSocket কনফিগারেশন এবং ব্যবহারের উদাহরণ

  1. ASP.Net Core WebSocket কনফিগারেশন

ASP.Net Core তে WebSocket সমর্থন শুরু করতে হলে, আপনাকে প্রথমে Startup.cs ফাইলে WebSocket middleware কনফিগার করতে হবে।

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        
        // WebSocket middleware configuration
        app.UseWebSockets();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}
  1. WebSocket হ্যান্ডলিং এবং ক্লায়েন্ট থেকে ডাটা পাঠানো
public class WebSocketHandler
{
    private readonly RequestDelegate _next;

    public WebSocketHandler(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        if (context.WebSockets.IsWebSocketRequest)
        {
            var webSocket = await context.WebSockets.AcceptWebSocketAsync();
            await HandleWebSocketAsync(webSocket);
        }
        else
        {
            await _next(context);
        }
    }

    private async Task HandleWebSocketAsync(WebSocket webSocket)
    {
        var buffer = new byte[1024 * 4];
        WebSocketReceiveResult result;
        do
        {
            result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
            await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), WebSocketMessageType.Text, true, CancellationToken.None);
        } while (!result.CloseStatus.HasValue);

        await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
    }
}
  1. Client-Side JavaScript (WebSocket ব্যবহার)
const socket = new WebSocket('ws://localhost:5000/socket');
socket.onopen = function(event) {
  console.log('WebSocket is connected');
  socket.send("Hello Server");
};

socket.onmessage = function(event) {
  console.log("Message from server: " + event.data);
};

socket.onclose = function(event) {
  console.log('WebSocket is closed');
};

২. Server-Sent Events (SSE)

Server-Sent Events (SSE) হল একটি ওয়েব প্রযুক্তি যা একমুখী (server-to-client) রিয়েল-টাইম ডাটা ট্রান্সফার করতে ব্যবহৃত হয়। SSE প্রোটোকল HTTP এর উপর ভিত্তি করে কাজ করে এবং ক্লায়েন্টকে সার্ভার থেকে পুশ ডাটা প্রদান করতে সক্ষম। এটি মূলত এমন অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত, যেখানে সার্ভার বারবার ক্লায়েন্টকে নতুন ডাটা পাঠাতে চায়, যেমন নিউজ ফিড, লাইভ সাপোর্ট, বা স্টক মার্কেট আপডেট।

SSE এর সুবিধা

  • একমুখী কমিউনিকেশন: শুধুমাত্র সার্ভার থেকে ক্লায়েন্টে ডাটা পুশ করা হয়।
  • HTTP ব্যবহার: SSE হেডার দিয়ে কনফিগার করা হয়, যা HTTP এর উপর ভিত্তি করে কাজ করে।
  • সহজ ব্যবহার: WebSocket এর তুলনায় SSE সেটআপ করা অনেক সহজ।

SSE কনফিগারেশন এবং ব্যবহারের উদাহরণ

  1. ASP.Net Core তে SSE কনফিগারেশন

SSE ব্যবহারের জন্য, সার্ভার থেকে ক্লায়েন্টকে পুশ ডাটা পাঠাতে হবে, যেটি একটি text/event-stream কনটেন্ট টাইপে পাঠানো হয়।

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    [HttpGet("/events")]
    public async Task GetSse()
    {
        Response.ContentType = "text/event-stream";
        for (int i = 0; i < 100; i++)
        {
            await Response.WriteAsync($"data: {DateTime.Now}\n\n");
            await Response.Body.FlushAsync();
            await Task.Delay(1000); // Delay between events
        }
    }
}
  1. Client-Side JavaScript (SSE ব্যবহার)
const eventSource = new EventSource('/events');

eventSource.onmessage = function(event) {
  console.log('New message from server: ' + event.data);
};

eventSource.onerror = function(event) {
  console.error("Error occurred in EventSource connection.");
};

৩. WebSockets এবং SSE এর মধ্যে পার্থক্য

বৈশিষ্ট্যWebSocketsServer-Sent Events (SSE)
কমিউনিকেশন টাইপদ্বিমুখী (server-to-client এবং client-to-server)একমুখী (server-to-client)
প্রোটোকলWebSocket (TCP)HTTP
স্ট্যান্ডার্ডRFC 6455HTML5
ব্যবহারচ্যাট অ্যাপ্লিকেশন, গেমস, লাইভ ডাটা ফিডলাইভ আপডেট, নিউজ ফিড, স্টক মার্কেট
পোর্টসাধারণত পোর্ট 80 বা 443 (HTTP/HTTPS)পোর্ট 80 বা 443 (HTTP/HTTPS)
ডাটা ফরম্যাটবাইনারি বা টেক্সটটেক্সট

সারাংশ

WebSockets এবং Server-Sent Events (SSE) দুটি শক্তিশালী প্রযুক্তি যা রিয়েল-টাইম কমিউনিকেশন সিস্টেম তৈরিতে ব্যবহৃত হয়। WebSockets দ্বিমুখী কমিউনিকেশন সুবিধা প্রদান করে এবং ডাটা আদান-প্রদান দ্রুত হয়, তবে এটি একটু বেশি কনফিগারেশন এবং সাপোর্ট চায়। অপরদিকে, SSE সহজ এবং HTTP ভিত্তিক একমুখী কমিউনিকেশন সুবিধা প্রদান করে, যা সাধারণত লাইভ ডাটা ফিডের জন্য উপযুক্ত।

Content added By
Promotion